/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 字符串.StringBuffer与Builder;

import org.junit.Test;

/**
 * @description
 java.lang.StringBuffer代表可变的字符序列，JDK1.0中声明，可以对字符
串内容进行增删，此时不会产生新的对象。
 很多方法与String相同。
 作为参数传递时，方法内部可以改变值。
StringBuilder 和 StringBuffer 非常类似，均代表可变的字符序列，而且
提供相关功能的方法也一样


面试题：对比String、StringBuffer、StringBuilder 底层使用char[]数组
String(JDK1.0)：不可变字符序列
StringBuffer(JDK1.0)：可变字符序列、效率低、线程安全
StringBuilder(JDK 5.0新增)：可变字符序列、效率高、线程不安全

            注意：作为参数传递的话，方法内部String不会改变其值，StringBuffer和StringBuilder
            会改变其值。

StringBuffer类不同于String，其对象必须使用构造器生成。有三个构造器：
    StringBuffer()：初始容量为16的字符串缓冲区
    StringBuffer(int size)：构造指定容量的字符串缓冲区
    StringBuffer(String str)：将内容初始化为指定字符串内容

StringBuffer append(xxx)：提供了很多的append()方法，用于进行字符串拼接                 在尾部拼接
StringBuffer delete(int start,int end)：删除指定位置的内容                         左闭右开  [ , )
StringBuffer replace(int start, int end, String str)：把[start,end)位置替换为str  左闭右开  [ , )
StringBuffer insert(int offset, xxx)：在指定位置插入xxx                           原元素顺位后移
StringBuffer reverse() ：把当前字符序列逆转

 当append和insert时，如果原来value数组长度不够，可扩容。
 如上这些方法支持 方 法 链

public int indexOf(String str)
public String substring(int start,int end)
public int length()
public char charAt(int n )
public void setCharAt(int n ,char ch) 修改

 * @author 俊昭
 * @date 2022/4/15
*/
public class SBTest01 {
    public static void main(String[] args) {

    }
    @Test
    public void test02(){
        StringBuffer sb1 = new StringBuffer("abcdefg");
        sb1.append("123");
        System.out.println(sb1);// abcdefg123

        sb1.delete(3,7);
        System.out.println(sb1);// abc123

        sb1.replace(2,4,"ai");
        System.out.println(sb1);// abai23

        sb1.insert(1,"**");
        System.out.println(sb1);// a**bai23
        System.out.println(sb1.length());// 8

        sb1.reverse();
        System.out.println(sb1);// 32iab**a

        String s1 = sb1.substring(0,3);
        System.out.println(s1);// 32i
    }
    @Test
    public void test01(){
        StringBuffer sb1 = new StringBuffer("abc");
        sb1.setCharAt(0,'A');// 将0位元素修改
        System.out.println(sb1);// Abc

    }
}
